<?php
	//公共控制器，执行一些重复操作 
	namespace Home\Controller;
	use Think\Controller;
	Class CommonController extends Controller{
		public function _initialize(){
			// 用户下一次登录时才执行此if判段下的代码块
			// 就是用户如果是首次登录的话会有
			// session[id]没有的话就是是二次登录
			if(cookie('auto')&& !isset($_SESSION['uid'])){
				//解析cookie 【0】:account，[1]:ip
				$value=explode('|',encryption(cookie('auto'),1));
				//用户当前登录的ip
				$ip=get_client_ip();
				//本次登录ip与上一次登录ip一致时
				if($ip==$value[1]){
					$account=$value[0];
					$where=array('account'=>$account);
					//查找用户信息
					$user=M('user')->where($where)->find();
					//用户在于并且用户未锁定
					if($user&&!$user['lock']){
					//保存登录关态
					session('uid',$user['id']);						
					}
				}
			}
			//session中有没有uid，是否登录
	    	if(!isset($_SESSION['uid'])){
				$this->redirect('login/index');
	    	}
			header('Content-Type:text/html;charset=UTF-8');
		}
		//添加用户分类
		public function addGroup(){
			if(!IS_AJAX){
				$this->redirect('index/index');
			}
			//准备好插入分类表的数据
			$data=array(
				'uid'=>session('uid'),
				'name'=>I('post.name')
			);
			//分类名是否重否
			$usergroup=M('group')->where(array('uid'=>session('uid')))->select();
			foreach ($usergroup as $key => $value) {
				if($value['name']==$data['name']){
					die(json_encode(array('status'=>0,'msg'=>'分类己存在啦')));
				}
			}
			//插入分类数据到group表中
			if(M('group')->data($data)->add()){
				die(json_encode(array('status'=>1,'msg'=>'添加分类succuss')));
			}else{
				die(json_encode(array('status'=>0,'msg'=>'添加分类fail')));
			}
		}
		//关注用户
		public function addFollow(){
			if(!IS_AJAX){
				$this->redirect('index/index');
			}
			//将js发送过来的关注用户的id和用户分组的id获取准备到插入数据里
			$data=array(
				'fans'=>session('uid'),
				'follow'=>I('post.follow_id'),
				'gid'=>I('post.group_id')
			);
			if ($_POST['group_id']==0) {
				die(json_encode(array('status'=>0,'msg'=>'分类名未被选择，请确定选择了分类，或没有创建分类')));
			}
			//判段是否重复关注
			if(M('follow')->where(array('fans'=>$data['fans'],'follow'=>$data['follow']))->getField('follow')){
				die(json_encode(array('status'=>0,'msg'=>'该用户己被关注')));				
			}
			//将数据插入到follw表中并给相关的用户粉丝数和关注数做一些修改
			if(M('follow')->data($data)->add()){
				//给被关注用户的fans字段加上1
				M('userinfo')->where(array('uid'=>$data['follow']))->setInc('fans');
				//给关注用户的用户的follow字段加上1
				M('userinfo')->where(array('uid'=>$data['fans']))->setInc('follow');
				//输出json
				echo json_encode(array('status'=>1,'msg'=>'关注成功'));
			}else{
				echo json_encode(array('status'=>0,'msg'=>'关注失败'));
			}
		}
		//移除关注或粉丝
		public function delFollow(){
			if (!IS_AJAX) {
				$this->redirect('index/index');
			}
			$uid=I('post.uid','intval');
			$type=I('post.type','intval');
			$where=$type?array('fans'=>session('uid'),'follow'=>$uid):array('follow'=>session('uid'),'fans'=>$uid);
			if(M('follow')->where($where)->delete()){
				$db=M('userinfo');
				if ($type) {
					//用户的关注数减1
					$db->where(array('id'=>session('uid')))->setDec('follow');
					//被操作的用户粉丝减1
					$db->where(array('id'=>$uid))->setDec('fans');
				} else {
					//用户的粉丝减1
					$db->where(array('id'=>session('uid')))->setDec('fans');
					//被操作用户的关注数减1
					$db->where(array('id'=>$uid))->setDec('follow');
				}
				echo "1";				
			}else{
				dump($where);
			}
		}
		//微博图片上传
		public function uploadPic(){
			if (!IS_POST) {
				$this->redirect('index/index');
			}
			$this->_upload(800,380,120);
		}
		//用户头像上传
		public function uploadFace(){
			if(!IS_POST){
				$this->redirect('index/index');
			}
			$this->_upload(180,80,50);
		}
		//处理上传
		public function upload(){
		    $upload = new \Think\Upload();// 实例化上传类
		    $upload->maxSize=C('UPLOAD_MAX_SIZE') ;// 设置附件上传大小
		    $upload->rootPath=C('UPLOAD_PATH'); // 设置附件上传根目录
		    $upload->exts=C('UPLOAD_EXTS');//允许图片上传类型
		    $upload->replace=true;//同名文件进行覆盖
		    $upload->saveName='time';
		    // 上传文件 
		    $info   =   $upload->upload();
		    // if(!$info) {// 上传错误提示错误信息
		    //     $this->error($upload->getError());
		    // }
		    return $info;
		}
		//自动创建缩略图文件路径
		//max:大缩图，mid:中缩图,sma:小缩图
		private function _upload($max,$mid,$sma){
			//文件上传
			$info=$this->upload();
			//原图文件夹
			$YuantunFilename=$info['image']['savepath'];
			//原图文件
			$YuantunFile=$info['image']['savename'];
			//原图路径
			$yuan=C('UPLOAD_PATH').$YuantunFilename.$YuantunFile;;
			$image = new \Think\Image(); 
			$image->open($yuan);
			//substr("待切割字符串","起始位置","从起始位置开始切割几位")
			//把原图文件夹中的最后一位路径定义符删掉
			$YuantunFilename=substr($YuantunFilename,0,strlen($YuantunFilename)-1);
			//缩略图文件夹创路径
			$filename=C('UPLOAD_PATH').''.$YuantunFilename.'-suolu';
			//不存在缩略文件夹就创建
			if (!file_exists($filename)) {
				//mkdir创建文件夹必须是在己存在的文件夹下才能建立文件夹
				mkdir($filename);
			}
			//缩略图保存路径
			$spath=$filename.'/'.'max'.$YuantunFile;
			$image->thumb($max,$max)->save($spath);
			$spath=$filename.'/'.'mid'.$YuantunFile;
			$image->thumb($mid,$mid)->save($spath);
			$spath=$filename.'/'.'sma'.$YuantunFile;
			$image->thumb($sma,$sma)->save($spath);
			//删除原图，一波
			unlink($yuan);
						//删除空文件夹，操你妈来啊
			rmdir(C('UPLOAD_PATH').$YuantunFilename);
			echo json_encode(array(
				'status'=>1,
				'path'=>array(
					'max'=>$filename.'/'.'max'.$YuantunFile,
					'mid'=>$filename.'/'.'mid'.$YuantunFile,
					'sma'=>$filename.'/'.'sma'.$YuantunFile
					),
				'msg'=>'上传错误'
				)
			);
		}
		//推送消息
		public function getMsg(){
			if(!IS_AJAX){
				$this->redirect('index/index');				
			}
			$uid=session('uid');
			$msg=S('usermsg'.$uid);
			//这里有一个坑
			//我是判段用户是否在这这个消息推送缓存数组有的话，就输出对应的信息
			//虽然第一次是有用没有bug的，当消息推送过去后，这个用户消息推送数组还是在的
			//但里面的对应的三个状态的数组的status却变为了零导致什么也不输出前端的status接收不到值
			//异步轮询就会报错，这个时候如果有别的用户发送状态给我也没有用，js轮询以经报错了
			if($msg){
				if($msg['comment']['status']){
					$msg['comment']['status']=0;
					S('usermsg'.$uid,$msg,0);
					die (json_encode(array('status'=>1,'total'=>$msg['comment']['total'],'type'=>1)));
				}
				if($msg['letter']['status']){
					$msg['letter']['status']=0;
					S('usermsg'.$uid,$msg,0);
					die (json_encode(array('status'=>1,'total'=>$msg['letter']['total'],'type'=>2)));
				}
				if($msg['atme']['status']){
					$msg['atme']['status']=0;
					S('usermsg'.$uid,$msg,0);
					die (json_encode(array('status'=>1,'total'=>$msg['atme']['total'],'type'=>3)));
				}else{
					echo json_encode(array('status'=>0));					
				}
			}else{
				echo json_encode(array('status'=>0));
			}		
		}
	}	
 ?>
